# -*- coding: utf-8 -*-
# @Time        :2025/3/8 16:03
# @Author      :文刀水寿
# @File        : 23_爬虫_解析_BeautifulSoup.py
"""
 @Description :BeautifulSoup
                简称： bs4
                什么是BeautifulSoup？
                和lxml一样，是一个html解析器 ，主要功能也是解析和提取数据
                优缺点？
                缺点：效率没有lxml的效率高
                优点：接口设计人性化，使用方便

导入
from bs4 import BeautifulSoup

创建对象
    服务器响应的文件生成对象
        soup = BeautifulSoup(response.read().decode(), 'lxml')
    本地文件生成对象
        soup = BeautifulSoup(open('1.html'), 'lxml')
        注意： 默认打开文件的编码格式位gbk，所以需要指定打开编码格式

        节点定位：
            1.根据标签名查找节点
                soup.a[注： 只能找到第一个a]
                    soup.a.name
                    soup.a.attrs
            2.函数
                （1）.find(返回一个对象)
                    find('a'): 只找到第一个a标签
                    find('a', title = '名字')
                    find('a', class_ = '名字')
                （2）,find_all(返回一个列表)
                    find_all('a'): 查找到所有的a
                    find_all(['a', 'span'])  返回所有的a和span
                    find_all('a', limit=2)    只找前俩个a
                （3）.select (根据选择器得到节点对象)【推荐】
                    1.element
                        eg:p
                    2..class
                        eg:..firstname
                    3.#id
                        eg:#firstname
                    4.属性选择器
                        [attribute]
                            eg:li = soup.select('li[class]')
                        [attribute=value]
                            eg:li = soup.select('li[class="henggeng1"]')
                    5.层级选择器
                        element element
                            div p
                        element element
                            div > p
                        element element
                            div,p
                                eg:soup = soup.select('a,span')


"""

from bs4 import BeautifulSoup

# 通过解析本地文件， 来弄bs4的基础语法进行讲解
# 默认打开的文件的编码格式是gbk，所以打开文件时候需要指定编码

soup = BeautifulSoup(open('23_爬虫_解析_bs4的基本使用.html', encoding='utf8'), 'lxml')

print(soup)
